/**
 *  CloudEdit- Editor colaborativo peer-to-peer
 *  Author: Miguel Souto Bartolomé
 *  Web: http://code.google.com/p/cloudedit/
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.google.gwt.cloudedit.server.auxiliares;

import java.io.Serializable;
import java.util.Date;

/**
 * Clase de apoyo para la conversión entre archivos serializables de GWT y 
 * archivos serializables normales.
 *  
 * @author Miguel Souto Bartolomé
 * @version 1.0  
 */
public class ArchivoSerializable implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -4204143008261948408L;

	/** El identificador del archivo. */
	private String id;

	/** El nombre del archivo. */
	private String name;

	/** Fecha de creación del archivo. */
	private Date created;

	/** Fecha de última modificación del archivo. */
	private Date modified;

	/** Contenido del archivo. */
	private String content;
	
	/** IP del último modificador del archivo. */
	private String ip;
	/**
	 * Método de creación vacío, necesario para hacer la clase serializable.
	 */
	public ArchivoSerializable() {
		//
	}
	/**
     * Método de creación.
     *
     * @param id el identificador del archivo
     * @param name el nombre del archivo
     * @param created fecha de creación
     * @param modified fecha de última modificación
     * @param content contenido del archivo
     * @param ip dirección IP del último usuario en grabar
     */
	public ArchivoSerializable(String id, String name, Date created, Date modified, String content, String ip) {
		this.id = id;
		this.name = name;
		this.created = created;
		this.modified = modified;
		this.content = content;
		this.ip = ip;
	}

	/**
	 * Devuelve el identificador del archivo.
	 * 
	 * @return el identificador
	 */
	public String getId() {
		return this.id;
	}

	/**
	 * Devuelve el nombre del archivo.
	 * 
	 * @return el nombre
	 */
	public String getName() {
		return this.name;
	}

	/**
	 * Devuelve el contenido del archivo de texto.
	 * 
	 * @return el contenido
	 */
	public String getContent() {
		return this.content;
	}

	/**
	 * Devuelve la fecha de creación del archivo.
	 * 
	 * @return la fecha de creación
	 */
	public Date getCreated() {
		return this.created;
	}

	/**
	 * Devuelve la IP del último modificador del archivo.
	 * 
	 * @return la IP
	 */
	public String getIp() {
		return this.ip;
	}
	
	/**
	 * Devuelve la fecha de modificación del archivo.
	 * 
	 * @return la fecha de modificación
	 */
	public Date getModified() {
		return this.modified;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	public boolean equals(Object o) {
		if (this == o)
			return true;
		if (o == null || getClass() != o.getClass())
			return false;

		ArchivoSerializable that = (ArchivoSerializable) o;

		if (this.id != null ? !this.id.equals(that.id) : that.id != null)
			return false;

		return true;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#hashCode()
	 */
	public int hashCode() {
		return (this.id != null ? this.id.hashCode() : 0);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		return "FileDescriptorData{" + "id='" + this.id + '\'' + ", name='" + this.name
				+ '\'' + ", this.size=" + (this.content.length() * 2) + ", created="
				+ this.created + ", modified=" + this.modified + '}';
	}

}
